<?php

/**
 * Класс WABehavior - WebApplicationBehavior 
 * Определяет какое приложение будет работать
 * 
 * @author Kosty Ryabichenko <k.ryabichenko@gmail.com>
 * @version 1.0
 */
class WABehavior extends CBehavior {

    /**
     * Название фронта
     * @var string
     */
    private $_endName;

    /**
     * Получить имя фронта
     * @return string
     */
    public function getEndName() {
        return $this->_endName;
    }

    /**
     * Запустить фронт
     * @param string $name
     */
    public function runEnd($name) {
        $this->_endName = $name;

        $this->chekAlias();
        $this->chekIp();
        $this->getSearchParams();

        $this->onModuleCreate = array($this, 'changeModulePaths');
        $this->onModuleCreate(new CEvent($this->owner));

        if ($name == 'back' && strpos($this->owner->getRequest()->getUrl(), 'gii') !== false) {
            $this->owner->defaultController = 'gii';
        }
        $this->owner->run();
    }

    /**
     * Вешаемся на событие создания модуля
     * @param CEvent $event
     */
    public function onModuleCreate($event) {
        $this->raiseEvent('onModuleCreate', $event);
    }

    /**
     * Сменить путь к контроллерам/вьюхам
     * @param CEvent $event
     */
    public function changeModulePaths($event) {
        $event->sender->controllerPath .= DIRECTORY_SEPARATOR . $this->_endName;
        $event->sender->viewPath .= DIRECTORY_SEPARATOR . $this->_endName;
    }
    
    

    /**
     * Определяет параметры фильтра
     * @param CEvent $event
     */
    public function getSearchParams() {
        $searchParams = Yii::app()->request->getParam('SearchForm', null);
        
        if(!empty($searchParams['city_id'])){
            $city = City::model()->FindByPk($searchParams['city_id']);
            if(!empty($city)){
                Yii::app()->session->add("searchParams", $searchParams);
            }
        }
    }
    
    /**
     * Проверяет существует ли указаная страница и активна ли она
     * @param CEvent $event
     */
    public function chekAlias() {

        if ($this->_endName == 'front') {

            $url = str_replace("@", "%40", $_SERVER['REQUEST_URI']);
            
            $criteria = new CDbCriteria;
            $criteria->condition = 'url = :url AND is_active = 1';
            $criteria->params = array(':url' => $url);
            
            if (!Page::model()->count($criteria)) {
                Yii::app()->request->redirect('/404');
            } else {
                Yii::app()->params['page'] = Page::model()->find($criteria);
            }
        }
    }
    
    /**
     * определяет Geo
     * @param CEvent $event
     */
    public function chekIp() {
        
        $ip = GeoHelper::getRealIp();
                
        if($ip == '127.0.0.1') { $ip = '77.47.208.91'; }
        
        if ($this->_endName == 'front') {

            // пытаюсь найти IP d БД
            $criteria = new CDbCriteria;
            $criteria->condition = 'ip = :ip';
            $criteria->params = array(':ip'=>$ip);
            $model = Geo::model()->find($criteria);
            
            if(!$model){
                
                $xml = GeoHelper::getInfo($ip);
                
                $model = new Geo();
                $model->ip = $ip;
                $model->inetnum = $xml->ip->inetnum;
                $model->country = $xml->ip->country;
                $model->city = $xml->ip->city;
                $model->region = $xml->ip->region;
                $model->lat = $xml->ip->lat;
                $model->lng = $xml->ip->lng;
                $model->pub_date = time();
                
                $model->save();
            }
            
            Yii::app()->params['geo'] = $model;
            
        }
    }

}